home *** CD-ROM | disk | FTP | other *** search
- package sun.font;
-
- import java.awt.Font;
- import java.awt.FontFormatException;
- import java.awt.GraphicsEnvironment;
- import java.io.File;
- import java.security.AccessController;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Hashtable;
- import java.util.Iterator;
- import java.util.Locale;
- import java.util.Map;
- import java.util.NoSuchElementException;
- import java.util.StringTokenizer;
- import java.util.TreeMap;
- import java.util.Vector;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.swing.plaf.FontUIResource;
- import sun.awt.AppContext;
- import sun.awt.FontConfiguration;
- import sun.awt.SunToolkit;
- import sun.awt.SunHints.Value;
- import sun.java2d.HeadlessGraphicsEnvironment;
- import sun.java2d.SunGraphicsEnvironment;
-
- public final class FontManager {
- public static final int FONTFORMAT_NONE = -1;
- public static final int FONTFORMAT_TRUETYPE = 0;
- public static final int FONTFORMAT_TYPE1 = 1;
- public static final int FONTFORMAT_T2K = 2;
- public static final int FONTFORMAT_TTC = 3;
- public static final int FONTFORMAT_COMPOSITE = 4;
- public static final int FONTFORMAT_NATIVE = 5;
- public static final int NO_FALLBACK = 0;
- public static final int PHYSICAL_FALLBACK = 1;
- public static final int LOGICAL_FALLBACK = 2;
- public static final int QUADPATHTYPE = 1;
- public static final int CUBICPATHTYPE = 2;
- private static final int CHANNELPOOLSIZE = 20;
- private static int lastPoolIndex = 0;
- private static int poolSize = 0;
- private static FileFont[] fontFileCache = new FileFont[20];
- private static int maxCompFont = 0;
- private static CompositeFont[] compFonts = new CompositeFont[20];
- private static Hashtable compositeFonts = new Hashtable();
- private static Hashtable physicalFonts = new Hashtable();
- private static ConcurrentHashMap<String, PhysicalFont> registeredFontFiles = new ConcurrentHashMap();
- private static Hashtable fullNameToFont = new Hashtable();
- private static HashMap localeFullNamesToFont;
- private static PhysicalFont defaultPhysicalFont;
- private static boolean usePlatformFontMetrics = false;
- public static Logger logger = null;
- public static boolean logging;
- static boolean longAddresses;
- static String osName;
- static boolean useT2K;
- static boolean isWindows;
- static boolean isSolaris;
- public static boolean isSolaris8;
- public static boolean isSolaris9;
- private static boolean loaded1dot0Fonts = false;
- static SunGraphicsEnvironment sgEnv;
- static boolean loadedAllFonts = false;
- static boolean loadedAllFontFiles = false;
- static TrueTypeFont eudcFont;
- static HashMap<String, String> jreFontMap;
- static HashSet<String> jreLucidaFontFiles;
- static String[] jreOtherFontFiles;
- static boolean noOtherJREFontFiles = false;
- private static String[] STR_ARRAY = new String[0];
- private static final Hashtable deferredFontFiles;
- private static final Hashtable initialisedFonts;
- private static HashMap<String, String> fontToFileMap;
- private static HashMap<String, String> fontToFamilyNameMap;
- private static HashMap<String, ArrayList<String>> familyToFontListMap;
- private static String[] pathDirs;
- private static Hashtable fontNameCache;
- private static final short US_LCID = 1033;
- private static Map lcidMap;
- private static Thread fileCloser;
- static Vector<File> tmpFontFiles;
- private static final Object altJAFontKey;
- private static final Object localeFontKey;
- private static final Object proportionalFontKey;
- public static boolean usingPerAppContextComposites;
- private static boolean usingAlternateComposites;
- private static boolean gAltJAFont;
- private static boolean gLocalePref;
- private static boolean gPropPref;
- private static HashSet installedNames;
- private static final Object regFamilyKey;
- private static final Object regFullNameKey;
- private static Hashtable<String, FontFamily> createdByFamilyName;
- private static Hashtable<String, Font2D> createdByFullName;
- private static boolean fontsAreRegistered;
- private static boolean fontsAreRegisteredPerAppContext;
- private static final String[][] nameMap;
- private static String[] fontConfigNames;
- private static FontConfigInfo[] fontConfigFonts;
-
- private static native void initIDs();
-
- public static void addToPool(FileFont var0) {
- boolean var1 = false;
- synchronized(fontFileCache) {
- if (poolSize < 20) {
- for(int var3 = 0; var3 < 20; ++var3) {
- if (fontFileCache[var3] == null) {
- fontFileCache[var3] = var0;
- ++poolSize;
- var1 = true;
- break;
- }
- }
-
- assert var1;
- } else {
- assert fontFileCache[lastPoolIndex] != var0;
-
- fontFileCache[lastPoolIndex].close();
- fontFileCache[lastPoolIndex] = var0;
- lastPoolIndex = (lastPoolIndex + 1) % 20;
- }
-
- }
- }
-
- public static void removeFromPool(FileFont var0) {
- synchronized(fontFileCache) {
- for(int var2 = 0; var2 < 20; ++var2) {
- if (fontFileCache[var2] == var0) {
- fontFileCache[var2] = null;
- --poolSize;
- }
- }
-
- }
- }
-
- public static boolean fontSupportsDefaultEncoding(Font var0) {
- return getFont2D(var0) instanceof CompositeFont;
- }
-
- public static FontUIResource getCompositeFontUIResource(Font var0) {
- FontUIResource var1 = new FontUIResource(var0.getName(), var0.getStyle(), var0.getSize());
- Font2D var2 = getFont2D(var0);
- if (!(var2 instanceof PhysicalFont)) {
- return var1;
- } else {
- CompositeFont var3 = (CompositeFont)findFont2D("dialog", var0.getStyle(), 0);
- if (var3 == null) {
- return var1;
- } else if (var3.getSlotFont(0) == var2) {
- return new FontUIResource("Dialog", var0.getStyle(), var0.getSize());
- } else {
- PhysicalFont var4 = (PhysicalFont)var2;
- CompositeFont var5 = new CompositeFont(var4, var3);
- setFont2D(var1, var5.handle);
- setCreatedFont(var1);
- return var1;
- }
- }
- }
-
- public static Font2DHandle getNewComposite(String var0, int var1, Font2DHandle var2) {
- if (!(var2.font2D instanceof CompositeFont)) {
- return var2;
- } else {
- CompositeFont var3 = (CompositeFont)var2.font2D;
- PhysicalFont var4 = var3.getSlotFont(0);
- if (var0 == null) {
- var0 = var4.getFamilyName((Locale)null);
- }
-
- if (var1 == -1) {
- var1 = var3.getStyle();
- }
-
- Object var5 = findFont2D(var0, var1, 0);
- if (!(var5 instanceof PhysicalFont)) {
- var5 = var4;
- }
-
- PhysicalFont var6 = (PhysicalFont)var5;
- CompositeFont var7 = (CompositeFont)findFont2D("dialog", var1, 0);
- if (var7 == null) {
- return var2;
- } else {
- CompositeFont var8 = new CompositeFont(var6, var7);
- Font2DHandle var9 = new Font2DHandle(var8);
- return var9;
- }
- }
- }
-
- public static native void setFont2D(Font var0, Font2DHandle var1);
-
- private static native boolean isCreatedFont(Font var0);
-
- private static native void setCreatedFont(Font var0);
-
- public static void registerCompositeFont(String var0, String[] var1, String[] var2, int var3, int[] var4, int[] var5, boolean var6) {
- CompositeFont var7 = new CompositeFont(var0, var1, var2, var3, var4, var5, var6);
- addCompositeToFontList(var7, 2);
- synchronized(compFonts) {
- compFonts[maxCompFont++] = var7;
- }
- }
-
- public static void registerCompositeFont(String var0, String[] var1, String[] var2, int var3, int[] var4, int[] var5, boolean var6, Hashtable var7) {
- CompositeFont var8 = new CompositeFont(var0, var1, var2, var3, var4, var5, var6);
- Font2D var9 = (Font2D)var7.get(var0.toLowerCase(Locale.ENGLISH));
- if (var9 instanceof CompositeFont) {
- var9.handle.font2D = var8;
- }
-
- var7.put(var0.toLowerCase(Locale.ENGLISH), var8);
- }
-
- private static void addCompositeToFontList(CompositeFont var0, int var1) {
- if (logging) {
- logger.info("Add to Family " + var0.familyName + ", Font " + var0.fullName + " rank=" + var1);
- }
-
- var0.setRank(var1);
- compositeFonts.put(var0.fullName, var0);
- fullNameToFont.put(var0.fullName.toLowerCase(Locale.ENGLISH), var0);
- FontFamily var2 = FontFamily.getFamily(var0.familyName);
- if (var2 == null) {
- var2 = new FontFamily(var0.familyName, true, var1);
- }
-
- var2.setFont(var0, var0.style);
- }
-
- private static PhysicalFont addToFontList(PhysicalFont var0, int var1) {
- String var2 = var0.fullName;
- String var3 = var0.familyName;
- if (var2 != null && !"".equals(var2)) {
- if (compositeFonts.containsKey(var2)) {
- return null;
- } else {
- var0.setRank(var1);
- if (!physicalFonts.containsKey(var2)) {
- if (logging) {
- logger.info("Add to Family " + var3 + ", Font " + var2 + " rank=" + var1);
- }
-
- physicalFonts.put(var2, var0);
- FontFamily var4 = FontFamily.getFamily(var3);
- if (var4 == null) {
- var4 = new FontFamily(var3, false, var1);
- var4.setFont(var0, var0.style);
- } else if (var4.getRank() >= var1) {
- var4.setFont(var0, var0.style);
- }
-
- fullNameToFont.put(var2.toLowerCase(Locale.ENGLISH), var0);
- return var0;
- } else {
- PhysicalFont var5 = (PhysicalFont)physicalFonts.get(var2);
- if (var5 == null) {
- return null;
- } else if (var5.getRank() >= var1) {
- if (var5.mapper != null && var1 > 2) {
- return var5;
- } else {
- if (var5.getRank() == var1) {
- if (!(var5 instanceof TrueTypeFont) || !(var0 instanceof TrueTypeFont)) {
- return var5;
- }
-
- TrueTypeFont var6 = (TrueTypeFont)var5;
- TrueTypeFont var7 = (TrueTypeFont)var0;
- if (var6.fileSize >= var7.fileSize) {
- return var5;
- }
- }
-
- if (var5.platName.startsWith(SunGraphicsEnvironment.jreFontDirName)) {
- if (logging) {
- logger.warning("Unexpected attempt to replace a JRE font " + var2 + " from " + var5.platName + " with " + var0.platName);
- }
-
- return var5;
- } else {
- if (logging) {
- logger.info("Replace in Family " + var3 + ",Font " + var2 + " new rank=" + var1 + " from " + var5.platName + " with " + var0.platName);
- }
-
- replaceFont(var5, var0);
- physicalFonts.put(var2, var0);
- fullNameToFont.put(var2.toLowerCase(Locale.ENGLISH), var0);
- FontFamily var9 = FontFamily.getFamily(var3);
- if (var9 == null) {
- var9 = new FontFamily(var3, false, var1);
- var9.setFont(var0, var0.style);
- } else if (var9.getRank() >= var1) {
- var9.setFont(var0, var0.style);
- }
-
- return var0;
- }
- }
- } else {
- return var5;
- }
- }
- }
- } else {
- return null;
- }
- }
-
- public static Font2D[] getRegisteredFonts() {
- PhysicalFont[] var0 = getPhysicalFonts();
- int var1 = maxCompFont;
- Font2D[] var2 = new Font2D[var0.length + var1];
- System.arraycopy(compFonts, 0, var2, 0, var1);
- System.arraycopy(var0, 0, var2, var1, var0.length);
- return var2;
- }
-
- public static PhysicalFont[] getPhysicalFonts() {
- return (PhysicalFont[])physicalFonts.values().toArray(new PhysicalFont[0]);
- }
-
- public static synchronized void initialiseDeferredFonts() {
- String[] var0 = (String[])deferredFontFiles.keySet().toArray(STR_ARRAY);
-
- for(int var1 = 0; var1 < var0.length; ++var1) {
- initialiseDeferredFont(var0[var1]);
- }
-
- }
-
- public static synchronized void registerDeferredJREFonts(String var0) {
- FontRegistrationInfo[] var1 = (FontRegistrationInfo[])deferredFontFiles.values().toArray(new FontRegistrationInfo[0]);
-
- for(int var2 = 0; var2 < var1.length; ++var2) {
- if (var1[var2].fontFilePath != null && var1[var2].fontFilePath.startsWith(var0)) {
- initialiseDeferredFont(var1[var2].fontFilePath);
- }
- }
-
- }
-
- private static PhysicalFont findJREDeferredFont(String var0, int var1) {
- String var3 = var0.toLowerCase(Locale.ENGLISH) + var1;
- String var4 = (String)jreFontMap.get(var3);
- if (var4 != null) {
- initSGEnv();
- var4 = SunGraphicsEnvironment.jreFontDirName + File.separator + var4;
- if (deferredFontFiles.get(var4) != null) {
- PhysicalFont var2 = initialiseDeferredFont(var4);
- if (var2 != null && (var2.getFontName((Locale)null).equalsIgnoreCase(var0) || var2.getFamilyName((Locale)null).equalsIgnoreCase(var0)) && var2.style == var1) {
- return var2;
- }
- }
- }
-
- if (noOtherJREFontFiles) {
- return null;
- } else {
- synchronized(jreLucidaFontFiles) {
- if (jreOtherFontFiles == null) {
- HashSet var6 = new HashSet();
- String[] var7 = (String[])deferredFontFiles.keySet().toArray(STR_ARRAY);
-
- for(int var8 = 0; var8 < var7.length; ++var8) {
- File var9 = new File(var7[var8]);
- String var10 = var9.getParent();
- String var11 = var9.getName();
- if (var10 != null && var10.equals(SunGraphicsEnvironment.jreFontDirName) && !jreLucidaFontFiles.contains(var11)) {
- var6.add(var7[var8]);
- }
- }
-
- jreOtherFontFiles = (String[])var6.toArray(STR_ARRAY);
- if (jreOtherFontFiles.length == 0) {
- noOtherJREFontFiles = true;
- }
- }
-
- for(int var17 = 0; var17 < jreOtherFontFiles.length; ++var17) {
- var4 = jreOtherFontFiles[var17];
- if (var4 != null) {
- jreOtherFontFiles[var17] = null;
- PhysicalFont var14 = initialiseDeferredFont(var4);
- if (var14 != null && (var14.getFontName((Locale)null).equalsIgnoreCase(var0) || var14.getFamilyName((Locale)null).equalsIgnoreCase(var0)) && var14.style == var1) {
- return var14;
- }
- }
- }
-
- return null;
- }
- }
- }
-
- private static PhysicalFont findOtherDeferredFont(String var0, int var1) {
- String[] var2 = (String[])deferredFontFiles.keySet().toArray(STR_ARRAY);
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- File var4 = new File(var2[var3]);
- String var5 = var4.getParent();
- String var6 = var4.getName();
- if (var5 == null || !var5.equals(SunGraphicsEnvironment.jreFontDirName) || !jreLucidaFontFiles.contains(var6)) {
- PhysicalFont var7 = initialiseDeferredFont(var2[var3]);
- if (var7 != null && (var7.getFontName((Locale)null).equalsIgnoreCase(var0) || var7.getFamilyName((Locale)null).equalsIgnoreCase(var0)) && var7.style == var1) {
- return var7;
- }
- }
- }
-
- return null;
- }
-
- private static PhysicalFont findDeferredFont(String var0, int var1) {
- PhysicalFont var2 = findJREDeferredFont(var0, var1);
- return var2 != null ? var2 : findOtherDeferredFont(var0, var1);
- }
-
- public static void registerDeferredFont(String var0, String var1, String[] var2, int var3, boolean var4, int var5) {
- FontRegistrationInfo var6 = new FontRegistrationInfo(var1, var2, var3, var4, var5);
- deferredFontFiles.put(var0, var6);
- }
-
- public static synchronized PhysicalFont initialiseDeferredFont(String var0) {
- if (var0 == null) {
- return null;
- } else {
- if (logging) {
- logger.info("Opening deferred font file " + var0);
- }
-
- FontRegistrationInfo var2 = (FontRegistrationInfo)deferredFontFiles.get(var0);
- PhysicalFont var1;
- if (var2 != null) {
- deferredFontFiles.remove(var0);
- var1 = registerFontFile(var2.fontFilePath, var2.nativeNames, var2.fontFormat, var2.javaRasterizer, var2.fontRank);
- if (var1 != null) {
- initialisedFonts.put(var0, var1.handle);
- } else {
- initialisedFonts.put(var0, getDefaultPhysicalFont().handle);
- }
- } else {
- Font2DHandle var3 = (Font2DHandle)initialisedFonts.get(var0);
- if (var3 == null) {
- var1 = getDefaultPhysicalFont();
- } else {
- var1 = (PhysicalFont)var3.font2D;
- }
- }
-
- return var1;
- }
- }
-
- public static PhysicalFont registerFontFile(String var0, String[] var1, int var2, boolean var3, int var4) {
- PhysicalFont var5 = (PhysicalFont)registeredFontFiles.get(var0);
- if (var5 != null) {
- return var5;
- } else {
- PhysicalFont var6 = null;
-
- try {
- label39:
- switch (var2) {
- case 0:
- int var8 = 0;
-
- while(true) {
- TrueTypeFont var9 = new TrueTypeFont(var0, var1, var8++, var3);
- PhysicalFont var13 = addToFontList(var9, var4);
- if (var6 == null) {
- var6 = var13;
- }
-
- if (var8 >= var9.getFontCount()) {
- break label39;
- }
- }
- case 1:
- Type1Font var10 = new Type1Font(var0, var1);
- var6 = addToFontList(var10, var4);
- break;
- case 5:
- NativeFont var11 = new NativeFont(var0, false);
- var6 = addToFontList(var11, var4);
- }
-
- if (logging) {
- logger.info("Registered file " + var0 + " as font " + var6 + " rank=" + var4);
- }
- } catch (FontFormatException var12) {
- if (logging) {
- logger.warning("Unusable font: " + var0 + " " + var12.toString());
- }
- }
-
- if (var6 != null && var2 != 5) {
- registeredFontFiles.put(var0, var6);
- }
-
- return var6;
- }
- }
-
- public static void registerFonts(String[] var0, String[][] var1, int var2, int var3, boolean var4, int var5, boolean var6) {
- for(int var7 = 0; var7 < var2; ++var7) {
- if (var6) {
- registerDeferredFont(var0[var7], var0[var7], var1[var7], var3, var4, var5);
- } else {
- registerFontFile(var0[var7], var1[var7], var3, var4, var5);
- }
- }
-
- }
-
- public static PhysicalFont getDefaultPhysicalFont() {
- if (defaultPhysicalFont == null) {
- defaultPhysicalFont = (PhysicalFont)findFont2D("Lucida Sans Regular", 0, 0);
- if (defaultPhysicalFont == null) {
- defaultPhysicalFont = (PhysicalFont)findFont2D("Arial", 0, 0);
- }
-
- if (defaultPhysicalFont == null) {
- Iterator var0 = physicalFonts.values().iterator();
- if (!var0.hasNext()) {
- throw new Error("Probable fatal error:No fonts found.");
- }
-
- defaultPhysicalFont = (PhysicalFont)var0.next();
- }
- }
-
- return defaultPhysicalFont;
- }
-
- public static CompositeFont getDefaultLogicalFont(int var0) {
- return (CompositeFont)findFont2D("dialog", var0, 0);
- }
-
- private static String dotStyleStr(int var0) {
- switch (var0) {
- case 1:
- return ".bold";
- case 2:
- return ".italic";
- case 3:
- return ".bolditalic";
- default:
- return ".plain";
- }
- }
-
- static void initSGEnv() {
- if (sgEnv == null) {
- GraphicsEnvironment var0 = GraphicsEnvironment.getLocalGraphicsEnvironment();
- if (var0 instanceof HeadlessGraphicsEnvironment) {
- HeadlessGraphicsEnvironment var1 = (HeadlessGraphicsEnvironment)var0;
- sgEnv = (SunGraphicsEnvironment)var1.getSunGraphicsEnvironment();
- } else {
- sgEnv = (SunGraphicsEnvironment)var0;
- }
- }
-
- }
-
- private static native void populateFontFileNameMap(HashMap<String, String> var0, HashMap<String, String> var1, HashMap<String, ArrayList<String>> var2, Locale var3);
-
- private static String[] getFontFilesFromPath() {
- return (String[])AccessController.doPrivileged(new 2());
- }
-
- private static void resolveWindowsFonts() {
- ArrayList var0 = null;
-
- for(String var2 : fontToFamilyNameMap.keySet()) {
- String var3 = (String)fontToFileMap.get(var2);
- if (var3 == null) {
- if (var2.indexOf(" ") > 0) {
- String var4 = var2.replaceFirst(" ", " ");
- var3 = (String)fontToFileMap.get(var4);
- if (var3 != null && !fontToFamilyNameMap.containsKey(var4)) {
- fontToFileMap.remove(var4);
- fontToFileMap.put(var2, var3);
- }
- } else if (var2.equals("marlett")) {
- fontToFileMap.put(var2, "marlett.ttf");
- } else if (var2.equals("david")) {
- var3 = (String)fontToFileMap.get("david regular");
- if (var3 != null) {
- fontToFileMap.remove("david regular");
- fontToFileMap.put("david", var3);
- }
- } else {
- if (var0 == null) {
- var0 = new ArrayList();
- }
-
- var0.add(var2);
- }
- }
- }
-
- if (var0 != null) {
- HashSet var8 = new HashSet();
- HashMap var9 = (HashMap)fontToFileMap.clone();
-
- for(String var16 : fontToFamilyNameMap.keySet()) {
- var9.remove(var16);
- }
-
- for(String var17 : var9.keySet()) {
- var8.add(var9.get(var17));
- fontToFileMap.remove(var17);
- }
-
- resolveFontFiles(var8, var0);
- if (var0.size() > 0) {
- ArrayList var14 = new ArrayList();
-
- for(String var5 : fontToFileMap.values()) {
- var14.add(var5.toLowerCase());
- }
-
- for(String var7 : getFontFilesFromPath()) {
- if (!var14.contains(var7)) {
- var8.add(var7);
- }
- }
-
- resolveFontFiles(var8, var0);
- }
-
- if (var0.size() > 0) {
- int var15 = var0.size();
-
- for(int var20 = 0; var20 < var15; ++var20) {
- String var22 = (String)var0.get(var20);
- String var23 = (String)fontToFamilyNameMap.get(var22);
- if (var23 != null) {
- ArrayList var24 = (ArrayList)familyToFontListMap.get(var23);
- if (var24 != null && var24.size() <= 1) {
- familyToFontListMap.remove(var23);
- }
- }
-
- fontToFamilyNameMap.remove(var22);
- if (logging) {
- logger.info("No file for font:" + var22);
- }
- }
- }
- }
-
- }
-
- private static void resolveFontFiles(HashSet<String> var0, ArrayList<String> var1) {
- Locale var2 = SunToolkit.getStartupLocale();
-
- for(String var4 : var0) {
- try {
- int var5 = 0;
- String var7 = getPathName(var4);
- if (logging) {
- logger.info("Trying to resolve file " + var7);
- }
-
- while(true) {
- TrueTypeFont var6 = new TrueTypeFont(var7, (Object)null, var5++, true);
- String var8 = var6.getFontName(var2).toLowerCase();
- if (var1.contains(var8)) {
- fontToFileMap.put(var8, var4);
- var1.remove(var8);
- if (logging) {
- logger.info("Resolved absent registry entry for " + var8 + " located in " + var7);
- }
- }
-
- if (var5 >= var6.getFontCount()) {
- break;
- }
- }
- } catch (Exception var9) {
- }
- }
-
- }
-
- private static synchronized HashMap<String, String> getFullNameToFileMap() {
- if (fontToFileMap == null) {
- StringTokenizer var0 = new StringTokenizer(getFontPath(SunGraphicsEnvironment.noType1Font), File.pathSeparator);
- ArrayList var1 = new ArrayList();
-
- try {
- while(var0.hasMoreTokens()) {
- var1.add(var0.nextToken());
- }
- } catch (NoSuchElementException var3) {
- }
-
- pathDirs = (String[])var1.toArray(STR_ARRAY);
- fontToFileMap = new HashMap(100);
- fontToFamilyNameMap = new HashMap(100);
- familyToFontListMap = new HashMap(50);
- populateFontFileNameMap(fontToFileMap, fontToFamilyNameMap, familyToFontListMap, Locale.ENGLISH);
- if (isWindows) {
- resolveWindowsFonts();
- }
-
- if (logging) {
- logPlatformFontInfo();
- }
- }
-
- return fontToFileMap;
- }
-
- private static void logPlatformFontInfo() {
- for(int var0 = 0; var0 < pathDirs.length; ++var0) {
- logger.info("fontdir=" + pathDirs[var0]);
- }
-
- for(String var1 : fontToFileMap.keySet()) {
- logger.info("font=" + var1 + " file=" + (String)fontToFileMap.get(var1));
- }
-
- for(String var5 : fontToFamilyNameMap.keySet()) {
- logger.info("font=" + var5 + " family=" + (String)fontToFamilyNameMap.get(var5));
- }
-
- for(String var6 : familyToFontListMap.keySet()) {
- logger.info("family=" + var6 + " fonts=" + familyToFontListMap.get(var6));
- }
-
- }
-
- public static String[] getFontNamesFromPlatform() {
- if (getFullNameToFileMap().size() == 0) {
- return null;
- } else {
- ArrayList var0 = new ArrayList();
-
- for(ArrayList var2 : familyToFontListMap.values()) {
- for(String var4 : var2) {
- var0.add(var4);
- }
- }
-
- return (String[])var0.toArray(STR_ARRAY);
- }
- }
-
- public static boolean gotFontsFromPlatform() {
- return getFullNameToFileMap().size() != 0;
- }
-
- public static String getFileNameForFontName(String var0) {
- String var1 = var0.toLowerCase(Locale.ENGLISH);
- return (String)fontToFileMap.get(var1);
- }
-
- public static void registerOtherFontFiles(HashSet var0) {
- if (getFullNameToFileMap().size() != 0) {
- String[] var1 = (String[])fontToFileMap.values().toArray(STR_ARRAY);
-
- for(int var2 = 0; var2 < var1.length; ++var2) {
- if ((new File(var1[var2])).isAbsolute() && !var0.contains(var1[var2])) {
- byte var3 = -1;
- byte var4 = 6;
- if (SunGraphicsEnvironment.ttFilter.accept((File)null, var1[var2])) {
- var3 = 0;
- var4 = 3;
- } else if (SunGraphicsEnvironment.t1Filter.accept((File)null, var1[var2])) {
- var3 = 1;
- var4 = 4;
- }
-
- if (var3 != -1) {
- registerFontFile(var1[var2], (String[])null, var3, false, var4);
- }
- }
- }
-
- }
- }
-
- public static boolean getFamilyNamesFromPlatform(TreeMap<String, String> var0, Locale var1) {
- if (getFullNameToFileMap().size() == 0) {
- return false;
- } else {
- String[] var2 = (String[])fontToFamilyNameMap.values().toArray(STR_ARRAY);
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- var0.put(var2[var3].toLowerCase(var1), var2[var3]);
- }
-
- return true;
- }
- }
-
- private static String getPathName(String var0) {
- File var1 = new File(var0);
- if (var1.isAbsolute()) {
- return var0;
- } else if (pathDirs.length == 1) {
- return pathDirs[0] + File.separator + var0;
- } else {
- for(int var2 = 0; var2 < pathDirs.length; ++var2) {
- var1 = new File(pathDirs[var2] + File.separator + var0);
- if (var1.exists()) {
- return var1.getAbsolutePath();
- }
- }
-
- return var0;
- }
- }
-
- private static Font2D findFontFromPlatform(String var0, int var1) {
- if (getFullNameToFileMap().size() == 0) {
- return null;
- } else {
- Object var2 = null;
- String var3 = null;
- String var4 = (String)fontToFamilyNameMap.get(var0);
- ArrayList var10;
- if (var4 != null) {
- var3 = (String)fontToFileMap.get(var0);
- var10 = (ArrayList)familyToFontListMap.get(var4.toLowerCase(Locale.ENGLISH));
- } else {
- var10 = (ArrayList)familyToFontListMap.get(var0);
- if (var10 != null && var10.size() > 0) {
- String var5 = ((String)var10.get(0)).toLowerCase(Locale.ENGLISH);
- if (var5 != null) {
- var4 = (String)fontToFamilyNameMap.get(var5);
- }
- }
- }
-
- if (var10 != null && var4 != null) {
- String[] var11 = (String[])var10.toArray(STR_ARRAY);
- if (var11.length == 0) {
- return null;
- } else {
- for(int var6 = 0; var6 < var11.length; ++var6) {
- String var7 = var11[var6].toLowerCase(Locale.ENGLISH);
- String var8 = (String)fontToFileMap.get(var7);
- if (var8 == null) {
- if (logging) {
- logger.info("Platform lookup : No file for font " + var11[var6] + " in family " + var4);
- }
-
- return null;
- }
- }
-
- PhysicalFont var12 = null;
- if (var3 != null) {
- var12 = registerFontFile(getPathName(var3), (String[])null, 0, false, 3);
- }
-
- for(int var13 = 0; var13 < var11.length; ++var13) {
- String var15 = var11[var13].toLowerCase(Locale.ENGLISH);
- String var9 = (String)fontToFileMap.get(var15);
- if (var3 == null || !var3.equals(var9)) {
- registerFontFile(getPathName(var9), (String[])null, 0, false, 3);
- }
- }
-
- Font2D var14 = null;
- FontFamily var16 = FontFamily.getFamily(var4);
- if (var12 != null) {
- var1 |= var12.style;
- }
-
- if (var16 != null) {
- var14 = var16.getFont(var1);
- if (var14 == null) {
- var14 = var16.getClosestStyle(var1);
- }
- }
-
- return var14;
- }
- } else {
- return null;
- }
- }
- }
-
- public static Font2D findFont2D(String var0, int var1, int var2) {
- String var3 = var0.toLowerCase(Locale.ENGLISH);
- String var4 = var3 + dotStyleStr(var1);
- Font2D var5;
- if (usingPerAppContextComposites) {
- Hashtable var6 = (Hashtable)AppContext.getAppContext().get(CompositeFont.class);
- if (var6 != null) {
- var5 = (Font2D)var6.get(var4);
- } else {
- var5 = null;
- }
- } else {
- var5 = (Font2D)fontNameCache.get(var4);
- }
-
- if (var5 != null) {
- return var5;
- } else {
- if (logging) {
- logger.info("Search for font: " + var0);
- }
-
- if (isWindows) {
- if (var3.equals("ms sans serif")) {
- var0 = "sansserif";
- } else if (var3.equals("ms serif")) {
- var0 = "serif";
- }
- }
-
- if (var3.equals("default")) {
- var0 = "dialog";
- }
-
- FontFamily var23 = FontFamily.getFamily(var0);
- if (var23 != null) {
- var5 = var23.getFontWithExactStyleMatch(var1);
- if (var5 == null) {
- var5 = findDeferredFont(var0, var1);
- }
-
- if (var5 == null) {
- var5 = var23.getFont(var1);
- }
-
- if (var5 == null) {
- var5 = var23.getClosestStyle(var1);
- }
-
- if (var5 != null) {
- fontNameCache.put(var4, var5);
- return var5;
- }
- }
-
- var5 = (Font2D)fullNameToFont.get(var3);
- if (var5 != null) {
- if (var5.style == var1 || var1 == 0) {
- fontNameCache.put(var4, var5);
- return var5;
- }
-
- var23 = FontFamily.getFamily(var5.getFamilyName((Locale)null));
- if (var23 != null) {
- Font2D var7 = var23.getFont(var1 | var5.style);
- if (var7 != null) {
- fontNameCache.put(var4, var7);
- return var7;
- }
-
- var7 = var23.getClosestStyle(var1 | var5.style);
- if (var7 != null && var7.canDoStyle(var1 | var5.style)) {
- fontNameCache.put(var4, var7);
- return var7;
- }
- }
- }
-
- if (sgEnv == null) {
- initSGEnv();
- return findFont2D(var0, var1, var2);
- } else {
- if (isWindows) {
- if (deferredFontFiles.size() > 0) {
- var5 = findJREDeferredFont(var3, var1);
- if (var5 != null) {
- fontNameCache.put(var4, var5);
- return var5;
- }
- }
-
- var5 = findFontFromPlatform(var3, var1);
- if (var5 != null) {
- if (logging) {
- logger.info("Found font via platform API for request:\"" + var0 + "\":, style=" + var1 + " found font: " + var5);
- }
-
- fontNameCache.put(var4, var5);
- return var5;
- }
- }
-
- if (deferredFontFiles.size() > 0) {
- var5 = findDeferredFont(var0, var1);
- if (var5 != null) {
- fontNameCache.put(var4, var5);
- return var5;
- }
- }
-
- if (isSolaris && !loaded1dot0Fonts) {
- if (var3.equals("timesroman")) {
- var5 = findFont2D("serif", var1, var2);
- fontNameCache.put(var4, var5);
- }
-
- sgEnv.register1dot0Fonts();
- loaded1dot0Fonts = true;
- Font2D var30 = findFont2D(var0, var1, var2);
- return var30;
- } else {
- if (fontsAreRegistered || fontsAreRegisteredPerAppContext) {
- Object var27 = null;
- Hashtable var8;
- Hashtable var28;
- if (fontsAreRegistered) {
- var28 = createdByFamilyName;
- var8 = createdByFullName;
- } else {
- AppContext var9 = AppContext.getAppContext();
- var28 = (Hashtable)var9.get(regFamilyKey);
- var8 = (Hashtable)var9.get(regFullNameKey);
- }
-
- var23 = (FontFamily)var28.get(var3);
- if (var23 != null) {
- var5 = var23.getFontWithExactStyleMatch(var1);
- if (var5 == null) {
- var5 = var23.getFont(var1);
- }
-
- if (var5 == null) {
- var5 = var23.getClosestStyle(var1);
- }
-
- if (var5 != null) {
- if (fontsAreRegistered) {
- fontNameCache.put(var4, var5);
- }
-
- return var5;
- }
- }
-
- var5 = (Font2D)var8.get(var3);
- if (var5 != null) {
- if (fontsAreRegistered) {
- fontNameCache.put(var4, var5);
- }
-
- return var5;
- }
- }
-
- if (!loadedAllFonts) {
- if (logging) {
- logger.info("Load fonts looking for:" + var0);
- }
-
- sgEnv.loadFonts();
- loadedAllFonts = true;
- return findFont2D(var0, var1, var2);
- } else if (!loadedAllFontFiles) {
- if (logging) {
- logger.info("Load font files looking for:" + var0);
- }
-
- sgEnv.loadFontFiles();
- loadedAllFontFiles = true;
- return findFont2D(var0, var1, var2);
- } else if ((var5 = findFont2DAllLocales(var0, var1)) != null) {
- fontNameCache.put(var4, var5);
- return var5;
- } else {
- if (isWindows) {
- String var29 = sgEnv.getFontConfiguration().getFallbackFamilyName(var0, (String)null);
- if (var29 != null) {
- var5 = findFont2D(var29, var1, var2);
- fontNameCache.put(var4, var5);
- return var5;
- }
- } else {
- if (var3.equals("timesroman")) {
- var5 = findFont2D("serif", var1, var2);
- fontNameCache.put(var4, var5);
- return var5;
- }
-
- if (var3.equals("helvetica")) {
- var5 = findFont2D("sansserif", var1, var2);
- fontNameCache.put(var4, var5);
- return var5;
- }
-
- if (var3.equals("courier")) {
- var5 = findFont2D("monospaced", var1, var2);
- fontNameCache.put(var4, var5);
- return var5;
- }
- }
-
- if (logging) {
- logger.info("No font found for:" + var0);
- }
-
- switch (var2) {
- case 1:
- return getDefaultPhysicalFont();
- case 2:
- return getDefaultLogicalFont(var1);
- default:
- return null;
- }
- }
- }
- }
- }
- }
-
- public static native Font2D getFont2D(Font var0);
-
- public static boolean usePlatformFontMetrics() {
- return usePlatformFontMetrics;
- }
-
- static native boolean getPlatformFontVar();
-
- public static short getLCIDFromLocale(Locale var0) {
- if (var0.equals(Locale.US)) {
- return 1033;
- } else {
- if (lcidMap == null) {
- createLCIDMap();
- }
-
- int var3;
- for(String var1 = var0.toString(); !"".equals(var1); var1 = var1.substring(0, var3)) {
- Short var2 = (Short)lcidMap.get(var1);
- if (var2 != null) {
- return var2;
- }
-
- var3 = var1.lastIndexOf(95);
- if (var3 < 1) {
- return 1033;
- }
- }
-
- return 1033;
- }
- }
-
- private static void addLCIDMapEntry(Map var0, String var1, short var2) {
- var0.put(var1, new Short(var2));
- }
-
- private static synchronized void createLCIDMap() {
- if (lcidMap == null) {
- HashMap var0 = new HashMap(200);
- addLCIDMapEntry(var0, "ar", (short)1025);
- addLCIDMapEntry(var0, "bg", (short)1026);
- addLCIDMapEntry(var0, "ca", (short)1027);
- addLCIDMapEntry(var0, "zh", (short)1028);
- addLCIDMapEntry(var0, "cs", (short)1029);
- addLCIDMapEntry(var0, "da", (short)1030);
- addLCIDMapEntry(var0, "de", (short)1031);
- addLCIDMapEntry(var0, "el", (short)1032);
- addLCIDMapEntry(var0, "es", (short)1034);
- addLCIDMapEntry(var0, "fi", (short)1035);
- addLCIDMapEntry(var0, "fr", (short)1036);
- addLCIDMapEntry(var0, "iw", (short)1037);
- addLCIDMapEntry(var0, "hu", (short)1038);
- addLCIDMapEntry(var0, "is", (short)1039);
- addLCIDMapEntry(var0, "it", (short)1040);
- addLCIDMapEntry(var0, "ja", (short)1041);
- addLCIDMapEntry(var0, "ko", (short)1042);
- addLCIDMapEntry(var0, "nl", (short)1043);
- addLCIDMapEntry(var0, "no", (short)1044);
- addLCIDMapEntry(var0, "pl", (short)1045);
- addLCIDMapEntry(var0, "pt", (short)1046);
- addLCIDMapEntry(var0, "rm", (short)1047);
- addLCIDMapEntry(var0, "ro", (short)1048);
- addLCIDMapEntry(var0, "ru", (short)1049);
- addLCIDMapEntry(var0, "hr", (short)1050);
- addLCIDMapEntry(var0, "sk", (short)1051);
- addLCIDMapEntry(var0, "sq", (short)1052);
- addLCIDMapEntry(var0, "sv", (short)1053);
- addLCIDMapEntry(var0, "th", (short)1054);
- addLCIDMapEntry(var0, "tr", (short)1055);
- addLCIDMapEntry(var0, "ur", (short)1056);
- addLCIDMapEntry(var0, "in", (short)1057);
- addLCIDMapEntry(var0, "uk", (short)1058);
- addLCIDMapEntry(var0, "be", (short)1059);
- addLCIDMapEntry(var0, "sl", (short)1060);
- addLCIDMapEntry(var0, "et", (short)1061);
- addLCIDMapEntry(var0, "lv", (short)1062);
- addLCIDMapEntry(var0, "lt", (short)1063);
- addLCIDMapEntry(var0, "fa", (short)1065);
- addLCIDMapEntry(var0, "vi", (short)1066);
- addLCIDMapEntry(var0, "hy", (short)1067);
- addLCIDMapEntry(var0, "eu", (short)1069);
- addLCIDMapEntry(var0, "mk", (short)1071);
- addLCIDMapEntry(var0, "tn", (short)1074);
- addLCIDMapEntry(var0, "xh", (short)1076);
- addLCIDMapEntry(var0, "zu", (short)1077);
- addLCIDMapEntry(var0, "af", (short)1078);
- addLCIDMapEntry(var0, "ka", (short)1079);
- addLCIDMapEntry(var0, "fo", (short)1080);
- addLCIDMapEntry(var0, "hi", (short)1081);
- addLCIDMapEntry(var0, "mt", (short)1082);
- addLCIDMapEntry(var0, "se", (short)1083);
- addLCIDMapEntry(var0, "gd", (short)1084);
- addLCIDMapEntry(var0, "ms", (short)1086);
- addLCIDMapEntry(var0, "kk", (short)1087);
- addLCIDMapEntry(var0, "ky", (short)1088);
- addLCIDMapEntry(var0, "sw", (short)1089);
- addLCIDMapEntry(var0, "tt", (short)1092);
- addLCIDMapEntry(var0, "bn", (short)1093);
- addLCIDMapEntry(var0, "pa", (short)1094);
- addLCIDMapEntry(var0, "gu", (short)1095);
- addLCIDMapEntry(var0, "ta", (short)1097);
- addLCIDMapEntry(var0, "te", (short)1098);
- addLCIDMapEntry(var0, "kn", (short)1099);
- addLCIDMapEntry(var0, "ml", (short)1100);
- addLCIDMapEntry(var0, "mr", (short)1102);
- addLCIDMapEntry(var0, "sa", (short)1103);
- addLCIDMapEntry(var0, "mn", (short)1104);
- addLCIDMapEntry(var0, "cy", (short)1106);
- addLCIDMapEntry(var0, "gl", (short)1110);
- addLCIDMapEntry(var0, "dv", (short)1125);
- addLCIDMapEntry(var0, "qu", (short)1131);
- addLCIDMapEntry(var0, "mi", (short)1153);
- addLCIDMapEntry(var0, "ar_IQ", (short)2049);
- addLCIDMapEntry(var0, "zh_CN", (short)2052);
- addLCIDMapEntry(var0, "de_CH", (short)2055);
- addLCIDMapEntry(var0, "en_GB", (short)2057);
- addLCIDMapEntry(var0, "es_MX", (short)2058);
- addLCIDMapEntry(var0, "fr_BE", (short)2060);
- addLCIDMapEntry(var0, "it_CH", (short)2064);
- addLCIDMapEntry(var0, "nl_BE", (short)2067);
- addLCIDMapEntry(var0, "no_NO_NY", (short)2068);
- addLCIDMapEntry(var0, "pt_PT", (short)2070);
- addLCIDMapEntry(var0, "ro_MD", (short)2072);
- addLCIDMapEntry(var0, "ru_MD", (short)2073);
- addLCIDMapEntry(var0, "sr_CS", (short)2074);
- addLCIDMapEntry(var0, "sv_FI", (short)2077);
- addLCIDMapEntry(var0, "az_AZ", (short)2092);
- addLCIDMapEntry(var0, "se_SE", (short)2107);
- addLCIDMapEntry(var0, "ga_IE", (short)2108);
- addLCIDMapEntry(var0, "ms_BN", (short)2110);
- addLCIDMapEntry(var0, "uz_UZ", (short)2115);
- addLCIDMapEntry(var0, "qu_EC", (short)2155);
- addLCIDMapEntry(var0, "ar_EG", (short)3073);
- addLCIDMapEntry(var0, "zh_HK", (short)3076);
- addLCIDMapEntry(var0, "de_AT", (short)3079);
- addLCIDMapEntry(var0, "en_AU", (short)3081);
- addLCIDMapEntry(var0, "fr_CA", (short)3084);
- addLCIDMapEntry(var0, "sr_CS", (short)3098);
- addLCIDMapEntry(var0, "se_FI", (short)3131);
- addLCIDMapEntry(var0, "qu_PE", (short)3179);
- addLCIDMapEntry(var0, "ar_LY", (short)4097);
- addLCIDMapEntry(var0, "zh_SG", (short)4100);
- addLCIDMapEntry(var0, "de_LU", (short)4103);
- addLCIDMapEntry(var0, "en_CA", (short)4105);
- addLCIDMapEntry(var0, "es_GT", (short)4106);
- addLCIDMapEntry(var0, "fr_CH", (short)4108);
- addLCIDMapEntry(var0, "hr_BA", (short)4122);
- addLCIDMapEntry(var0, "ar_DZ", (short)5121);
- addLCIDMapEntry(var0, "zh_MO", (short)5124);
- addLCIDMapEntry(var0, "de_LI", (short)5127);
- addLCIDMapEntry(var0, "en_NZ", (short)5129);
- addLCIDMapEntry(var0, "es_CR", (short)5130);
- addLCIDMapEntry(var0, "fr_LU", (short)5132);
- addLCIDMapEntry(var0, "bs_BA", (short)5146);
- addLCIDMapEntry(var0, "ar_MA", (short)6145);
- addLCIDMapEntry(var0, "en_IE", (short)6153);
- addLCIDMapEntry(var0, "es_PA", (short)6154);
- addLCIDMapEntry(var0, "fr_MC", (short)6156);
- addLCIDMapEntry(var0, "sr_BA", (short)6170);
- addLCIDMapEntry(var0, "ar_TN", (short)7169);
- addLCIDMapEntry(var0, "en_ZA", (short)7177);
- addLCIDMapEntry(var0, "es_DO", (short)7178);
- addLCIDMapEntry(var0, "sr_BA", (short)7194);
- addLCIDMapEntry(var0, "ar_OM", (short)8193);
- addLCIDMapEntry(var0, "en_JM", (short)8201);
- addLCIDMapEntry(var0, "es_VE", (short)8202);
- addLCIDMapEntry(var0, "ar_YE", (short)9217);
- addLCIDMapEntry(var0, "es_CO", (short)9226);
- addLCIDMapEntry(var0, "ar_SY", (short)10241);
- addLCIDMapEntry(var0, "en_BZ", (short)10249);
- addLCIDMapEntry(var0, "es_PE", (short)10250);
- addLCIDMapEntry(var0, "ar_JO", (short)11265);
- addLCIDMapEntry(var0, "en_TT", (short)11273);
- addLCIDMapEntry(var0, "es_AR", (short)11274);
- addLCIDMapEntry(var0, "ar_LB", (short)12289);
- addLCIDMapEntry(var0, "en_ZW", (short)12297);
- addLCIDMapEntry(var0, "es_EC", (short)12298);
- addLCIDMapEntry(var0, "ar_KW", (short)13313);
- addLCIDMapEntry(var0, "en_PH", (short)13321);
- addLCIDMapEntry(var0, "es_CL", (short)13322);
- addLCIDMapEntry(var0, "ar_AE", (short)14337);
- addLCIDMapEntry(var0, "es_UY", (short)14346);
- addLCIDMapEntry(var0, "ar_BH", (short)15361);
- addLCIDMapEntry(var0, "es_PY", (short)15370);
- addLCIDMapEntry(var0, "ar_QA", (short)16385);
- addLCIDMapEntry(var0, "es_BO", (short)16394);
- addLCIDMapEntry(var0, "es_SV", (short)17418);
- addLCIDMapEntry(var0, "es_HN", (short)18442);
- addLCIDMapEntry(var0, "es_NI", (short)19466);
- addLCIDMapEntry(var0, "es_PR", (short)20490);
- lcidMap = var0;
- }
- }
-
- public static int getNumFonts() {
- return physicalFonts.size() + maxCompFont;
- }
-
- private static boolean fontSupportsEncoding(Font var0, String var1) {
- return getFont2D(var0).supportsEncoding(var1);
- }
-
- public static synchronized native String getFontPath(boolean var0);
-
- public static synchronized native void setNativeFontPath(String var0);
-
- public static Font2D createFont2D(File var0, int var1, boolean var2) throws FontFormatException {
- String var3 = var0.getPath();
- Object var4 = null;
-
- try {
- switch (var1) {
- case 0:
- var4 = new TrueTypeFont(var3, (Object)null, 0, true);
- break;
- case 1:
- var4 = new Type1Font(var3, (Object)null);
- break;
- default:
- throw new FontFormatException("Unrecognised Font Format");
- }
- } catch (FontFormatException var10) {
- if (var2) {
- AccessController.doPrivileged(new 3(var0));
- }
-
- throw var10;
- }
-
- if (var2) {
- ((FileFont)var4).setFileToRemove(var0);
- synchronized(FontManager.class) {
- if (tmpFontFiles == null) {
- tmpFontFiles = new Vector();
- }
-
- tmpFontFiles.add(var0);
- if (fileCloser == null) {
- 4 var7 = new 4();
- AccessController.doPrivileged(new 5(var7));
- }
- }
- }
-
- return (Font2D)var4;
- }
-
- public static synchronized String getFullNameByFileName(String var0) {
- PhysicalFont[] var1 = getPhysicalFonts();
-
- for(int var2 = 0; var2 < var1.length; ++var2) {
- if (var1[var2].platName.equals(var0)) {
- return var1[var2].getFontName((Locale)null);
- }
- }
-
- return null;
- }
-
- public static synchronized void deRegisterBadFont(Font2D var0) {
- if (var0 instanceof PhysicalFont) {
- if (logging) {
- logger.severe("Deregister bad font: " + var0);
- }
-
- replaceFont((PhysicalFont)var0, getDefaultPhysicalFont());
- }
- }
-
- public static synchronized void replaceFont(PhysicalFont var0, PhysicalFont var1) {
- if (var0.handle.font2D == var0) {
- var0.handle.font2D = var1;
- physicalFonts.remove(var0.fullName);
- fullNameToFont.remove(var0.fullName.toLowerCase(Locale.ENGLISH));
- FontFamily.remove(var0);
- if (localeFullNamesToFont != null) {
- Map.Entry[] var2 = (Map.Entry[])localeFullNamesToFont.entrySet().toArray(new Map.Entry[0]);
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- if (var2[var3].getValue() == var0) {
- try {
- var2[var3].setValue(var1);
- } catch (Exception var5) {
- localeFullNamesToFont.remove(var2[var3].getKey());
- }
- }
- }
- }
-
- for(int var6 = 0; var6 < maxCompFont; ++var6) {
- if (var1.getRank() > 2) {
- compFonts[var6].replaceComponentFont(var0, var1);
- }
- }
-
- }
- }
-
- private static synchronized void loadLocaleNames() {
- if (localeFullNamesToFont == null) {
- localeFullNamesToFont = new HashMap();
- Font2D[] var0 = getRegisteredFonts();
-
- for(int var1 = 0; var1 < var0.length; ++var1) {
- if (var0[var1] instanceof TrueTypeFont) {
- TrueTypeFont var2 = (TrueTypeFont)var0[var1];
- String[] var3 = var2.getAllFullNames();
-
- for(int var4 = 0; var4 < var3.length; ++var4) {
- localeFullNamesToFont.put(var3[var4], var2);
- }
-
- FontFamily var5 = FontFamily.getFamily(var2.familyName);
- if (var5 != null) {
- FontFamily.addLocaleNames(var5, var2.getAllFamilyNames());
- }
- }
- }
-
- }
- }
-
- private static Font2D findFont2DAllLocales(String var0, int var1) {
- if (logging) {
- logger.info("Searching localised font names for:" + var0);
- }
-
- if (localeFullNamesToFont == null) {
- loadLocaleNames();
- }
-
- String var2 = var0.toLowerCase();
- Object var3 = null;
- FontFamily var4 = FontFamily.getLocaleFamily(var2);
- if (var4 != null) {
- Font2D var8 = var4.getFont(var1);
- if (var8 == null) {
- var8 = var4.getClosestStyle(var1);
- }
-
- if (var8 != null) {
- return var8;
- }
- }
-
- Font2D var9;
- synchronized(FontManager.class) {
- var9 = (Font2D)localeFullNamesToFont.get(var0);
- }
-
- if (var9 != null) {
- if (var9.style == var1 || var1 == 0) {
- return var9;
- }
-
- var4 = FontFamily.getFamily(var9.getFamilyName((Locale)null));
- if (var4 != null) {
- Font2D var11 = var4.getFont(var1);
- if (var11 != null) {
- return var11;
- }
-
- var11 = var4.getClosestStyle(var1);
- if (var11 != null) {
- if (!var11.canDoStyle(var1)) {
- var11 = null;
- }
-
- return var11;
- }
- }
- }
-
- return var9;
- }
-
- static boolean maybeUsingAlternateCompositeFonts() {
- return usingAlternateComposites || usingPerAppContextComposites;
- }
-
- public static boolean usingAlternateCompositeFonts() {
- return usingAlternateComposites || usingPerAppContextComposites && AppContext.getAppContext().get(CompositeFont.class) != null;
- }
-
- private static boolean maybeMultiAppContext() {
- Boolean var0 = (Boolean)AccessController.doPrivileged(new 6());
- return var0;
- }
-
- public static synchronized void useAlternateFontforJALocales() {
- if (isWindows) {
- initSGEnv();
- if (!maybeMultiAppContext()) {
- gAltJAFont = true;
- } else {
- AppContext var0 = AppContext.getAppContext();
- var0.put(altJAFontKey, altJAFontKey);
- }
-
- }
- }
-
- public static boolean usingAlternateFontforJALocales() {
- if (!maybeMultiAppContext()) {
- return gAltJAFont;
- } else {
- AppContext var0 = AppContext.getAppContext();
- return var0.get(altJAFontKey) == altJAFontKey;
- }
- }
-
- public static synchronized void preferLocaleFonts() {
- initSGEnv();
- if (FontConfiguration.willReorderForStartupLocale()) {
- if (!maybeMultiAppContext()) {
- if (gLocalePref) {
- return;
- }
-
- gLocalePref = true;
- sgEnv.createCompositeFonts(fontNameCache, gLocalePref, gPropPref);
- usingAlternateComposites = true;
- } else {
- AppContext var0 = AppContext.getAppContext();
- if (var0.get(localeFontKey) == localeFontKey) {
- return;
- }
-
- var0.put(localeFontKey, localeFontKey);
- boolean var1 = var0.get(proportionalFontKey) == proportionalFontKey;
- Hashtable var2 = new Hashtable();
- var0.put(CompositeFont.class, var2);
- usingPerAppContextComposites = true;
- sgEnv.createCompositeFonts(var2, true, var1);
- }
-
- }
- }
-
- public static synchronized void preferProportionalFonts() {
- if (FontConfiguration.hasMonoToPropMap()) {
- initSGEnv();
- if (!maybeMultiAppContext()) {
- if (gPropPref) {
- return;
- }
-
- gPropPref = true;
- sgEnv.createCompositeFonts(fontNameCache, gLocalePref, gPropPref);
- usingAlternateComposites = true;
- } else {
- AppContext var0 = AppContext.getAppContext();
- if (var0.get(proportionalFontKey) == proportionalFontKey) {
- return;
- }
-
- var0.put(proportionalFontKey, proportionalFontKey);
- boolean var1 = var0.get(localeFontKey) == localeFontKey;
- Hashtable var2 = new Hashtable();
- var0.put(CompositeFont.class, var2);
- usingPerAppContextComposites = true;
- sgEnv.createCompositeFonts(var2, var1, true);
- }
-
- }
- }
-
- private static HashSet getInstalledNames() {
- if (installedNames == null) {
- SunGraphicsEnvironment var10000 = sgEnv;
- Locale var0 = SunGraphicsEnvironment.getSystemStartupLocale();
- String[] var1 = sgEnv.getInstalledFontFamilyNames(var0);
- Font[] var2 = sgEnv.getAllInstalledFonts();
- HashSet var3 = new HashSet();
-
- for(int var4 = 0; var4 < var1.length; ++var4) {
- var3.add(var1[var4].toLowerCase(var0));
- }
-
- for(int var5 = 0; var5 < var2.length; ++var5) {
- var3.add(var2[var5].getFontName(var0).toLowerCase(var0));
- }
-
- installedNames = var3;
- }
-
- return installedNames;
- }
-
- public static boolean registerFont(Font var0) {
- synchronized(regFamilyKey) {
- if (createdByFamilyName == null) {
- createdByFamilyName = new Hashtable();
- createdByFullName = new Hashtable();
- }
- }
-
- if (!isCreatedFont(var0)) {
- return false;
- } else {
- if (sgEnv == null) {
- initSGEnv();
- }
-
- HashSet var1 = getInstalledNames();
- SunGraphicsEnvironment var10000 = sgEnv;
- Locale var2 = SunGraphicsEnvironment.getSystemStartupLocale();
- String var3 = var0.getFamily(var2).toLowerCase();
- String var4 = var0.getFontName(var2).toLowerCase();
- if (!var1.contains(var3) && !var1.contains(var4)) {
- Hashtable var5;
- Hashtable var6;
- if (!maybeMultiAppContext()) {
- var5 = createdByFamilyName;
- var6 = createdByFullName;
- fontsAreRegistered = true;
- } else {
- AppContext var7 = AppContext.getAppContext();
- var5 = (Hashtable)var7.get(regFamilyKey);
- var6 = (Hashtable)var7.get(regFullNameKey);
- if (var5 == null) {
- var5 = new Hashtable();
- var6 = new Hashtable();
- var7.put(regFamilyKey, var5);
- var7.put(regFullNameKey, var6);
- }
-
- fontsAreRegisteredPerAppContext = true;
- }
-
- Font2D var11 = getFont2D(var0);
- int var8 = var11.getStyle();
- FontFamily var9 = (FontFamily)var5.get(var3);
- if (var9 == null) {
- var9 = new FontFamily(var0.getFamily(var2));
- var5.put(var3, var9);
- }
-
- if (fontsAreRegistered) {
- removeFromCache(var9.getFont(0));
- removeFromCache(var9.getFont(1));
- removeFromCache(var9.getFont(2));
- removeFromCache(var9.getFont(3));
- removeFromCache((Font2D)var6.get(var4));
- }
-
- var9.setFont(var11, var8);
- var6.put(var4, var11);
- return true;
- } else {
- return false;
- }
- }
- }
-
- private static void removeFromCache(Font2D var0) {
- if (var0 != null) {
- String[] var1 = (String[])fontNameCache.keySet().toArray(STR_ARRAY);
-
- for(int var2 = 0; var2 < var1.length; ++var2) {
- if (fontNameCache.get(var1[var2]) == var0) {
- fontNameCache.remove(var1[var2]);
- }
- }
-
- }
- }
-
- public static TreeMap<String, String> getCreatedFontFamilyNames() {
- Hashtable var0;
- if (fontsAreRegistered) {
- var0 = createdByFamilyName;
- } else {
- if (!fontsAreRegisteredPerAppContext) {
- return null;
- }
-
- AppContext var1 = AppContext.getAppContext();
- var0 = (Hashtable)var1.get(regFamilyKey);
- }
-
- SunGraphicsEnvironment var10000 = sgEnv;
- Locale var10 = SunGraphicsEnvironment.getSystemStartupLocale();
- synchronized(var0) {
- TreeMap var3 = new TreeMap();
-
- for(FontFamily var5 : var0.values()) {
- Font2D var6 = var5.getFont(0);
- if (var6 == null) {
- var6 = var5.getClosestStyle(0);
- }
-
- String var7 = var6.getFamilyName(var10);
- var3.put(var7.toLowerCase(var10), var7);
- }
-
- return var3;
- }
- }
-
- public static Font[] getCreatedFonts() {
- Hashtable var0;
- if (fontsAreRegistered) {
- var0 = createdByFullName;
- } else {
- if (!fontsAreRegisteredPerAppContext) {
- return null;
- }
-
- AppContext var1 = AppContext.getAppContext();
- var0 = (Hashtable)var1.get(regFullNameKey);
- }
-
- SunGraphicsEnvironment var10000 = sgEnv;
- Locale var9 = SunGraphicsEnvironment.getSystemStartupLocale();
- synchronized(var0) {
- Font[] var3 = new Font[var0.size()];
- int var4 = 0;
-
- for(Font2D var6 : var0.values()) {
- var3[var4++] = new Font(var6.getFontName(var9), 0, 1);
- }
-
- return var3;
- }
- }
-
- public static String mapFcName(String var0) {
- for(int var1 = 0; var1 < nameMap.length; ++var1) {
- if (var0.equals(nameMap[var1][0])) {
- return nameMap[var1][1];
- }
- }
-
- return null;
- }
-
- private static String getFCLocaleStr() {
- Locale var0 = SunToolkit.getStartupLocale();
- String var1 = var0.getLanguage();
- String var2 = var0.getCountry();
- if (!var2.equals("")) {
- var1 = var1 + "-" + var2;
- }
-
- return var1;
- }
-
- private static native int getFontConfigAASettings(String var0, String var1);
-
- public static Object getFontConfigAAHint(String var0) {
- if (isWindows) {
- return null;
- } else {
- int var1 = getFontConfigAASettings(getFCLocaleStr(), var0);
- return var1 < 0 ? null : Value.get(2, var1);
- }
- }
-
- public static Object getFontConfigAAHint() {
- return getFontConfigAAHint("sans");
- }
-
- private static native void getFontConfig(String var0, FontConfigInfo[] var1);
-
- private static void initFontConfigFonts() {
- if (!isWindows) {
- FontConfigInfo[] var0 = new FontConfigInfo[fontConfigNames.length];
-
- for(int var1 = 0; var1 < var0.length; ++var1) {
- var0[var1] = new FontConfigInfo((1)null);
- var0[var1].fcName = fontConfigNames[var1];
- int var2 = var0[var1].fcName.indexOf(58);
- var0[var1].fcFamily = var0[var1].fcName.substring(0, var2);
- var0[var1].jdkName = mapFcName(var0[var1].fcFamily);
- var0[var1].style = var1 % 4;
- }
-
- getFontConfig(getFCLocaleStr(), var0);
- fontConfigFonts = var0;
- }
- }
-
- private static PhysicalFont registerFromFcInfo(FontConfigInfo var0) {
- int var1 = var0.fontFile.length() - 4;
- if (var1 <= 0) {
- return null;
- } else {
- String var2 = var0.fontFile.substring(var1).toLowerCase();
- boolean var3 = var2.equals(".ttc");
- PhysicalFont var4 = (PhysicalFont)registeredFontFiles.get(var0.fontFile);
- if (var4 != null) {
- if (var3) {
- Font2D var9 = findFont2D(var0.familyName, var0.style, 0);
- return var9 instanceof PhysicalFont ? (PhysicalFont)var9 : null;
- } else {
- return var4;
- }
- } else {
- var4 = findJREDeferredFont(var0.familyName, var0.style);
- if (var4 == null && deferredFontFiles.get(var0.fontFile) != null) {
- var4 = initialiseDeferredFont(var0.fontFile);
- if (var4 != null) {
- if (var3) {
- Font2D var8 = findFont2D(var0.familyName, var0.style, 0);
- if (var8 instanceof PhysicalFont) {
- return (PhysicalFont)var8;
- }
-
- return null;
- }
-
- return var4;
- }
- }
-
- if (var4 == null) {
- byte var5 = -1;
- byte var6 = 6;
- if (!var2.equals(".ttf") && !var3) {
- if (var2.equals(".pfa") || var2.equals(".pfb")) {
- var5 = 1;
- var6 = 4;
- }
- } else {
- var5 = 0;
- var6 = 3;
- }
-
- var4 = registerFontFile(var0.fontFile, (String[])null, var5, true, var6);
- }
-
- return var4;
- }
- }
- }
-
- private static CompositeFont getFontConfigFont(String var0, int var1) {
- PhysicalFont var2 = null;
- if (fontConfigFonts == null) {
- long var3 = 0L;
- if (logging) {
- var3 = System.currentTimeMillis();
- }
-
- initFontConfigFonts();
- if (logging) {
- long var5 = System.currentTimeMillis();
- logger.info("Time spent accessing fontconfig=" + (var5 - var3) + "ms.");
-
- for(int var7 = 0; var7 < fontConfigFonts.length; ++var7) {
- FontConfigInfo var8 = fontConfigFonts[var7];
- logger.info("FC font " + var8.fcName + " maps to family " + var8.familyName + " in file " + var8.fontFile);
- }
- }
- }
-
- var0 = var0.toLowerCase();
- FontConfigInfo var10 = null;
-
- for(int var4 = 0; var4 < fontConfigFonts.length; ++var4) {
- if (var0.equals(fontConfigFonts[var4].fcFamily) && var1 == fontConfigFonts[var4].style) {
- var10 = fontConfigFonts[var4];
- break;
- }
- }
-
- if (var10 == null) {
- var10 = fontConfigFonts[0];
- }
-
- if (logging) {
- logger.info("FC name=" + var0 + " style=" + var1 + " uses " + var10.familyName + " in file: " + var10.fontFile);
- }
-
- if (var10.compFont != null) {
- return var10.compFont;
- } else {
- CompositeFont var11 = (CompositeFont)findFont2D(var10.jdkName, var1, 2);
- if (var10.familyName != null && var10.fontFile != null) {
- FontFamily var12 = FontFamily.getFamily(var10.familyName);
- if (var12 != null) {
- Font2D var6 = var12.getFontWithExactStyleMatch(var10.style);
- if (var6 instanceof PhysicalFont) {
- var2 = (PhysicalFont)var6;
- }
- }
-
- if (var2 == null || !var10.fontFile.equals(var2.platName)) {
- var2 = registerFromFcInfo(var10);
- if (var2 == null) {
- return var10.compFont = var11;
- }
-
- var12 = FontFamily.getFamily(var2.getFamilyName((Locale)null));
- }
-
- for(int var13 = 0; var13 < fontConfigFonts.length; ++var13) {
- FontConfigInfo var14 = fontConfigFonts[var13];
- if (var14 != var10 && var2.getFamilyName((Locale)null).equals(var14.familyName) && !var14.fontFile.equals(var2.platName) && var12.getFontWithExactStyleMatch(var14.style) == null) {
- registerFromFcInfo(fontConfigFonts[var13]);
- }
- }
-
- return var10.compFont = new CompositeFont(var2, var11);
- } else {
- return var10.compFont = var11;
- }
- }
- }
-
- public static FontUIResource getFontConfigFUIR(String var0, int var1, int var2) {
- String var3 = mapFcName(var0);
- if (var3 == null) {
- var3 = "sansserif";
- }
-
- if (isWindows) {
- return new FontUIResource(var3, var1, var2);
- } else {
- CompositeFont var4 = getFontConfigFont(var0, var1);
- if (var4 == null) {
- return new FontUIResource(var3, var1, var2);
- } else {
- FontUIResource var5 = new FontUIResource(var4.getFamilyName((Locale)null), var1, var2);
- setFont2D(var5, var4.handle);
- setCreatedFont(var5);
- return var5;
- }
- }
- }
-
- // $FF: synthetic method
- static void access$000() {
- initIDs();
- }
-
- // $FF: synthetic method
- static boolean access$102(boolean var0) {
- usePlatformFontMetrics = var0;
- return var0;
- }
-
- // $FF: synthetic method
- static String[] access$200() {
- return pathDirs;
- }
-
- // $FF: synthetic method
- static String[] access$300() {
- return STR_ARRAY;
- }
-
- // $FF: synthetic method
- static FileFont[] access$400() {
- return fontFileCache;
- }
-
- // $FF: synthetic method
- static Thread access$502(Thread var0) {
- fileCloser = var0;
- return var0;
- }
-
- // $FF: synthetic method
- static Thread access$500() {
- return fileCloser;
- }
-
- static {
- if (SunGraphicsEnvironment.debugFonts) {
- logger = Logger.getLogger("sun.java2d", (String)null);
- logging = logger.getLevel() != Level.OFF;
- }
-
- jreFontMap = new HashMap();
- jreFontMap.put("lucida sans0", "LucidaSansRegular.ttf");
- jreFontMap.put("lucida sans1", "LucidaSansDemiBold.ttf");
- jreFontMap.put("lucida sans regular0", "LucidaSansRegular.ttf");
- jreFontMap.put("lucida sans regular1", "LucidaSansDemiBold.ttf");
- jreFontMap.put("lucida sans bold1", "LucidaSansDemiBold.ttf");
- jreFontMap.put("lucida sans demibold1", "LucidaSansDemiBold.ttf");
- jreFontMap.put("lucida sans typewriter0", "LucidaTypewriter.ttf");
- jreFontMap.put("lucida sans typewriter1", "LucidaTypewriterBold.ttf");
- jreFontMap.put("lucida sans typewriter regular0", "LucidaTypewriter.ttf");
- jreFontMap.put("lucida sans typewriter regular1", "LucidaTypewriterBold.ttf");
- jreFontMap.put("lucida sans typewriter bold1", "LucidaTypewriterBold.ttf");
- jreFontMap.put("lucida sans typewriter demibold1", "LucidaTypewriterBold.ttf");
- jreFontMap.put("lucida bright0", "LucidaBrightRegular.ttf");
- jreFontMap.put("lucida bright1", "LucidaBrightDemiBold.ttf");
- jreFontMap.put("lucida bright2", "LucidaBrightItalic.ttf");
- jreFontMap.put("lucida bright3", "LucidaBrightDemiItalic.ttf");
- jreFontMap.put("lucida bright regular0", "LucidaBrightRegular.ttf");
- jreFontMap.put("lucida bright regular1", "LucidaBrightDemiBold.ttf");
- jreFontMap.put("lucida bright regular2", "LucidaBrightItalic.ttf");
- jreFontMap.put("lucida bright regular3", "LucidaBrightDemiItalic.ttf");
- jreFontMap.put("lucida bright bold1", "LucidaBrightDemiBold.ttf");
- jreFontMap.put("lucida bright bold3", "LucidaBrightDemiItalic.ttf");
- jreFontMap.put("lucida bright demibold1", "LucidaBrightDemiBold.ttf");
- jreFontMap.put("lucida bright demibold3", "LucidaBrightDemiItalic.ttf");
- jreFontMap.put("lucida bright italic2", "LucidaBrightItalic.ttf");
- jreFontMap.put("lucida bright italic3", "LucidaBrightDemiItalic.ttf");
- jreFontMap.put("lucida bright bold italic3", "LucidaBrightDemiItalic.ttf");
- jreFontMap.put("lucida bright demibold italic3", "LucidaBrightDemiItalic.ttf");
- jreLucidaFontFiles = new HashSet();
- String[] var0 = (String[])jreFontMap.values().toArray(STR_ARRAY);
-
- for(int var1 = 0; var1 < var0.length; ++var1) {
- jreLucidaFontFiles.add(var0[var1]);
- }
-
- AccessController.doPrivileged(new 1());
- deferredFontFiles = new Hashtable();
- initialisedFonts = new Hashtable();
- fontToFileMap = null;
- fontToFamilyNameMap = null;
- familyToFontListMap = null;
- pathDirs = null;
- fontNameCache = new Hashtable(10, 0.75F);
- fileCloser = null;
- tmpFontFiles = null;
- altJAFontKey = new Object();
- localeFontKey = new Object();
- proportionalFontKey = new Object();
- usingPerAppContextComposites = false;
- usingAlternateComposites = false;
- gAltJAFont = false;
- gLocalePref = false;
- gPropPref = false;
- installedNames = null;
- regFamilyKey = new Object();
- regFullNameKey = new Object();
- fontsAreRegistered = false;
- fontsAreRegisteredPerAppContext = false;
- nameMap = new String[][]{{"sans", "sansserif"}, {"sans-serif", "sansserif"}, {"serif", "serif"}, {"monospace", "monospaced"}};
- fontConfigNames = new String[]{"sans:regular:roman", "sans:bold:roman", "sans:regular:italic", "sans:bold:italic", "serif:regular:roman", "serif:bold:roman", "serif:regular:italic", "serif:bold:italic", "monospace:regular:roman", "monospace:bold:roman", "monospace:regular:italic", "monospace:bold:italic"};
- }
- }
-